package top.huhuiyu.p4;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;

/**
 * 文件知识点学习
 *
 * @author 胡辉煜
 */
public class FileStudy {

  /**
   * 写入文本文件的演示功能
   *
   * @throws FileNotFoundException 写入文件可能会发生异常
   */
  public void write() throws FileNotFoundException {
    System.out.println("文件知识点学习");
    // 文件对象，构造的时候需要给定文件的路径名称
    File file1 = new File("demo.txt");
    // 判断文件是否存在的方法
    boolean exists = file1.exists();
    System.out.println("文件是否存在：" + exists);
    // 写入文本文件的对象，构造的时候需要给定一个文件对象
    PrintWriter pw = new PrintWriter(file1);
    // 写入信息
    pw.println("黑暗骑士");
    pw.println("可以写入多次");
    // 关闭对象的输出
    pw.close();
    System.out.println("写入完成");
  }


  /**
   * 读取文本文件的演示功能
   *
   * @throws FileNotFoundException 读取文件发生错误
   */
  public void read() throws FileNotFoundException {
    File file1 = new File("demo.txt");
    // 读取文本文件的对象
    Scanner sc = new Scanner(file1);
    // 读取一行信息
    String line = sc.nextLine();
    System.out.println("读取到的内容：" + line);
    line = sc.nextLine();
    System.out.println(line);
    // 关闭对象的输入
    sc.close();
  }

  public void read2() throws FileNotFoundException {
    // 要读取的文件名路径
    String filename = "D:\\git-projects\\teach-soucre\\java-2301\\web2301\\bilibili.html";
    File file = new File(filename);
    // 判断文件是否存在
    // 文件对象.exists()方法会返回一个boolean类型的值
    // 如果存在，返回true，否则返回false
    // java的最基本的流程控制语句if
    // if(逻辑表达式){ 逻辑表达式为true是要执行的代码 }
    // else{ 逻辑表达式为false时要执行的代码 }
    // 逻辑表达式是只会返回true或false的表达式
    if (file.exists()) {
      System.out.println("文件存在");
      System.out.println("文件大小：" + file.length());
      // 读取文件的内容
      Scanner sc = new Scanner(file);

//      boolean hasline = sc.hasNextLine();
//      System.out.println("文件是否有还有一行内容：" + hasline);
//      String line = sc.nextLine();
//      System.out.println("内容：" + line);

      // java流程控制-while循环
      // while(逻辑表达式) { 逻辑表达式为true时要执行的代码 }
      // while和if的差别，当执行代码完成后会再次执行逻辑表达式的判断，为true就会一直重复的执行
      while (sc.hasNextLine()) {
        String line = sc.nextLine();
        System.out.println(line);
      }

      // 关闭读取
      sc.close();
    } else {
      System.out.println("文件不存在");
    }
  }

  public void write2() throws FileNotFoundException {
    File file = new File("for.txt");
    PrintWriter pw = new PrintWriter(file);

    // java流程控制for循环
    // for(循环前要执行的初始化代码;循环是否继续的逻辑表达式;每次循环之后要执行的代码){ 循环代码 }
    // 下面的代码的意义
    // 进入for循环之前创建一个变量i，且初始值为1
    // 如果i的值小于或者等于520，则执行循环代码
    // 执行完循环代码之后会调用i=i+1,也就是每次都会让i的值变化
    // for里面的三段表达式都是可以省略的，但是不可以省略;
    // for和while的区别，for一般用于已知次数的循环，while一般用于未知次数的循环
    // while直接判断是否要进入循环，for可以在每次循环之后执行代码
    for (int i = 1; i <= 520; i = i + 1) {
      pw.println(i + ":我爱你");
    }

    pw.close();
    System.out.println("写入完成");
  }


  public static void main(String[] args) throws FileNotFoundException {
    FileStudy fs = new FileStudy();
//    fs.write();
//    fs.read();
    // fs.read2();
    fs.write2();

  }

}
